
/*
*Pool Public Licence version 0.1 or later
*Released on 20th April 2008.
*Any voilations can be repoted at paritosh@wikiocean.net
*What is treated as voilations can be found at www.wikiocean.net/ppl1-voilations* 
******************************************************************************
* The contents of this file are subject Affero GPL v3 and later with additional conditions.
* The additional conditions are to be considered as part of the Affero GPL v3 and later.
* The additional conditions will supersede the Affero GPLv3 and later in case of conflict.
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.gnu.org/licenses/agpl.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Initial Developer of the Original Code is Paritosh Pungaliya.
* created by Paritosh Pungaliya are Copyright (C) Paritosh Pungaliya; All Rights Reserved.
* Contributions are Copyright (C) 2001-2008 Paritosh Pungaliya.

* Objective of the additional terms (license) 
* 1) Is to extend the software freedom to freedom to work.
* 2) To ensure that knowledge is free from monopoly of agencie(s).
* 3) To avoid a situation where big corporates or investors can buy out free software groups and companies and then start milking the communities built around it.
* (this trend can be seen how the openness changes in companies that get Venture Capital funding.)
* (if you agree to this logic I invite you to our group to work together)

* Additional conditions
*  0) Source code will also include
* 	a) data dictionaries, data ontologies which are used to alter the behavior of code or to control           the features of application.
* 	b) Any code generated or derived automatically or manually from this code or logic
*  1) The revenue generated by deploying, implementing , selling services and other activities
*  	 based on this source code should be shared 100%, between the people working on it.
*  2) Capital invested should be given only fixed rate of return or linked to revenue/surplus growth for limited time.
*  3) People working on the project should always have an option to replace the capital provider in full or part with lower cost capital.
*  4) Their should not be any ownership which can be sold as a claim on future profit to be generated from the work of people working on the code.
*  5) Brand thus generated should belong to the group.
*  6) For old and new members revenue sharing should be equal for same work equivalent.
*  7) The share of revenue should be decided by bidding for work before allocation of work within the group.
*  8) Before bidding various method of measuring the work should be clearly defined and published in public domain. Any change in process should also be publised in public domain imediately.
*  9) All data related to to revenue sharing should be published as and when generated in public domain.
*  10) For group of people having size more than 10 people will have to make it open online for others to participate in bids. 
*  11) All people involved in related and sub project will be treated as a group.
*  12) Once this license is being used for a certain code then all and any other software services being provided by the group should complusorilly come under 100% revenue sharing.
*  13) Cross subsidization should not happen under this revenue share, no additional benefit should be drawn from the people, by the employing agency.
*  14) Any position or knowledge or legal structure created relating to people working on code, which adversely affects the spirit of 100% revenue share will be treated as a violation.
*  15) Revenue sharing defined.
*     a) includes direct revenue and also intangible gains like brand, and organization.
*     b) No personal judgment should be involved in judging the distribution of revenue.It has to be pre-defined formula based.
*     c)100% of revenue should be shared before expenses and recievers should have control over what expenses to incur.
*     d)For the work done in any month by contributing group member, working on any project can be given revenue share from the work done by the group, for a maximum of 18 months after that month.
*     e)Revenue should be apportioned to the month in which work is done and not when received.
*  The group fulfilling the above conditions also has to be a wiki ecosystem further defined in www.wekosystem.org or read about Wekosystem at www.wikiocean.net

*  ******************************************************************************
*/  
package importPool;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Stack;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import sort.Sortby;

public class selectsortby  extends JFrame implements  ItemListener,ActionListener
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;	
	private Vector<Object>jcomboVector = new Vector<Object>();
	private JButton sort;
	private JButton addMore;
	private JButton Delete;
	private JLabel sortbyorder;
	private int count=0;
	
	private String[] arrFiels;	
	private String inputpath=" ";	
	private String order=" ";	
	private String tablename="";
	private int y=80;
	 private Vector<Object> indexVector=new Vector<Object>();
	 private Stack< Object>importStack=new Stack<Object>();
	
	public selectsortby(String[] arrFields, String path, String order,Stack<Object> importStack)
	{
		super(); 
 		this.arrFiels=arrFields;
 		this.importStack=importStack;
 		this.inputpath=path;
 		this.order=order;
 		//this.setSize(new Dimension(1500, 1500));
 		initializeComponent(arrFiels);
 		this.setVisible(true); 
	}
	public selectsortby() 
	{
	}
	private void initializeComponent(String[] arrFields) 
 	{ 
		System.out.print("i am in selectsortby");
 		JComboBox jcombo =new JComboBox();
 		for(int i=0;i<arrFields.length;i++)
 		{
 			System.out.println("arrFields"+arrFields[i]);
 			jcombo.addItem(arrFields[i]);
 	 		System.out.println("jcombo   in loop "+jcombo);
 		}
 		
       	contentPane = (JPanel)this.getContentPane();
       	contentPane.setLayout(null);
       	
       	sort = new JButton();
    	sort.setText("sort");
       	sort.addActionListener(this);
       	addMore = new JButton();
    	addMore.setText("Add More");
    	addMore.addActionListener(this);
       	
    	Delete = new JButton();
    	Delete.setText("Delete");
    	Delete.addActionListener(this);
    	
    	
       	sortbyorder=new JLabel();
       	sortbyorder.setText("sort by");
       	
    
    	addComponent(contentPane, sortbyorder, 15,40,80,30);
 		addComponent(contentPane, jcombo,150,40,250,30);
 		addComponent(contentPane, addMore,500,40,120,30);
 		addComponent(contentPane, Delete,500,80,120,30);
 		addComponent(contentPane, sort,500,120,120,30);
 		
 		jcomboVector.add(jcombo);
 		System.out.println("jcombo    "+jcombo);
   		this.setTitle("SelectSortby"); 
 		this.setLocation(new Point(0, 0)); 
 		
 		int dimX = 700;
 		//int dimY = 400;
 		
 		int dimY = arrFields.length * 60;
 		
 		this.setSize(new Dimension(dimX,dimY));
 		this.setResizable(false);
 } 
	
	
  private void addComponent(Container container,Component c,int x,int y,int width,int height) 
 	{ 
 		c.setBounds(x,y,width,height); 
 		container.add(c);
 		container.setSize(new Dimension(900, 900));
 	
 	} 
  
  private void removeComponent(Container container,Component c) 
	{ 
			container.remove(c);
	} 
  
  

 public void actionPerformed(ActionEvent ae)
	{	
	
		if(ae.getSource()==sort)
		{
			JComboBox jc;
		try
			{
				
				RandomAccessFile file;
				try 
				{
					file = new RandomAccessFile(inputpath,"rws");
					String heading=" ";
					
					try 
					{
						heading=file.readLine();
						System.out.println("Heading ========="+heading);
						String[] str=heading.split("\t");

						for(int	i=0;i<jcomboVector.size();i++)
						{
							jc=(JComboBox) jcomboVector.get(i);
						
									System.out.println("tablename"+tablename);
									for(int j=0;j<str.length;j++)
									{
										tablename=jc.getSelectedItem().toString();						
									
										/*if(str[j].equals(tablename))
										{
											JOptionPane.showMessageDialog(this,tablename);	
											//indexarr[0]=j;
											indexVector.add(j);
										}*/
										
										//String s="";
										//int p=0;
										if(str[j].equals(tablename))
										{
											JOptionPane.showMessageDialog(this,tablename);	
											
											
											//indexarr[0]=j;
										
											/*if(indexVector.size()==0)
											{
												tablename=jc.getSelectedItem().toString();		
												indexVector.add(j);
											}
											else
											{
												for(int k=0;k<indexVector.size();k++)
												{
													s=indexVector.get(k).toString();
													p=Integer.parseInt(s);										
													if(p==j)
													{
														JOptionPane.showMessageDialog(this,tablename);	
													}
												
													else
													{
														tablename=jc.getSelectedItem().toString();		
														indexVector.add(j);
													}
												}
											}*/													
													
											indexVector.add(j);
										}
									}							
						}
						
					//	itemVector.add(itemName);
						//System.out.println("index arr    "+indexarr[0]);
						System.out.println("IndexVector"+indexVector);
					
					}
					catch (IOException e1) 
					{
						e1.printStackTrace();
					}
					
				}
				catch (FileNotFoundException e)
				{
						e.printStackTrace();
				}
				
				System.out.println("input path"+inputpath);
				System.out.println("order path----"+order);
				Sortby so=new Sortby();
				so.SetPath(inputpath);
				so.initializeData();
				so.addReport(indexVector,order);
				setVisible(false);
				 while (!importStack.empty())
				 {
					 ImportFile im = (ImportFile) importStack.pop();
					 im.setVisible(true);
				 }
			}
			catch(Exception e)
			{
				e.printStackTrace();
				JOptionPane.showMessageDialog(this, "Unable to get input path");
			}
		}
		if(ae.getSource()==addMore)
		{
			int arrlenght;
			System.out.println("i m in addmore");
			JComboBox jcomboadd =new JComboBox();
			//JLabel lable=new JLabel();
			//lable.setText("sort by");
	       	
			arrlenght=arrFiels.length;
			if(count<arrlenght-1)
			{
				for(int i=0;i<arrFiels.length;i++)
		 		{

					System.out.println("arrFields"+arrFiels[i]);
		 			jcomboadd.addItem(arrFiels[i]);
		 	 		System.out.println("jcombo   in loop "+jcomboadd);
		 		}
		 	 	contentPane = (JPanel)this.getContentPane();
		       	contentPane.setLayout(null);
		       	//addComponent(contentPane, lable, 15,y,80,30);
		     	this.setVisible(false); 
		       	this.setVisible(true); 
		       	addComponent(contentPane, jcomboadd,150,y,250,30);
				y=y+40;
				jcomboVector.add(jcomboadd);
				count++;
				this.setVisible(true); 
			}
			else
			{
				JOptionPane.showMessageDialog(this, "No More Field For Sortby");	
				
			}
			
		}
		if(ae.getSource()==Delete)
		{
			if(jcomboVector.size()!=1)
			{
				JComboBox jcb=new JComboBox();
				jcb=(JComboBox) jcomboVector.get(jcomboVector.size()-1);
				removeComponent(contentPane,jcb);
				jcomboVector.remove(jcomboVector.size()-1);
				this.setVisible(false); 
				this.setVisible(true);
				count--;
				y=y-40;
				JOptionPane.showMessageDialog(this, "Delete last combobox");
			}
			else
			{
				JOptionPane.showMessageDialog(this, "can not delete the combobox");
				
			}
		
		}
	
	}
 	
	public void itemStateChanged(ItemEvent event)
	{
	}
	
}

 
